home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Singles Flirt Up Your Life! (German)
/
Singles Flirt Up Your Life.iso
/
data1.cab
/
Statemachine
/
tutorialShakeHands.lua
< prev
next >
Wrap
Text File
|
2004-01-29
|
20KB
|
630 lines
-- Shakehands Testmission
--
-- used mission objects:
-- trigger1 - triggers hello in initial state
beginStateMachine()
-- lure
FRAGEZEICHEN = 3;
-- sayHello trigger location
GREETINGPOINT = 1;
-- showFlat trigger locations
GUCKHIER = 2; -- bewege linda zu mike
GUCKDA = 3; -- mike starrt nach draussen
GUCKDORT = 4; -- linda starrt nach draussen
GUCKWEG = 5; -- mike jammert ueber seine wenigen hinnuebergeretteten moebel
-- optionalQuest trigger locations
KITCHEN = 6;
BATH = 7;
LINDASROOM = 8;
MIKESROOM = -1;
DAMAGEDOVEN = 20;
onEnter(function(msg)
popupMission();
print("------------------------------------------tutorialShakeHands OnEnter");
end )
onExit(function(msg)
print("------------------------------------------tutorialShakeHands OnExit");
getParent().enableAI(true);
end )
onMsg("bleibSitzen", function(msg)
--print("blaaaaaaaaaaaa #########");
getParent().getCharacter(MIKE).setCondition( NEED_COMFORT, 0.5 );
sendDelayedMsgThis("bleibSitzen",5000);
end )
state("initial")
onMsg("enterTrigger" .. GREETINGPOINT, function(msg)
local char = getStateObjectFromID(msg.sender);
if ( getStateObjectFromID(msg.sender).isFemale() ) then
setState("sayHello");
local mike = getParent().getCharacter(MIKE);
--char.cancelCurrentActivity();
char.queueCommand("pm_talkCutscene", "talkCutscene", mike, "").setUserCancel(false);
print("------------------------------------------tutorialShakeHands initial");
getParent().enableAI(false);
end
end )
---- SAY HELLO - CONVERSATION -------------------------------------------
state("sayHello")
onMsg("talking", function(msg)
setState("showFlat");
popupConversation("dialogTutSH1");
end )
---- SHOW FLAT - INTERACTION --------------------------------------------
state("showFlat")
-- ok msg gets posted by ending outgoing conversation @ sayHello0
onMsg("yes", function(msg)
getParent().getCharacter(MIKE).cancelCurrentActivity();
getParent().getCharacter(ELAINE).cancelCurrentActivity();
sendDelayedMsgThis("epsilon", 2000, "");
-- birdView();
end )
onMsg("epsilon", function(msg)
getParent().getCharacter(MIKE).walkSO.walkToActionPoint(
getParent().getCharacter(MIKE).getObjectsWithTag(GUCKHIER)[1].getActionPoint("south")
);
end )
onMsg("enterTrigger" .. GUCKHIER, function(msg)
if ( getStateObjectFromID(msg.sender).isMale() ) then
-- Mike betritt das Wohnzimmer
popupConversation("dialogTutSH2");
getParent().centerView( {getParent().getCharacter(MIKE)} );
-- lure aktivieren
getParent().getCharacter(MIKE).getObjectsWithTag(GUCKHIER)[1]
.getObjectsWithBehavior("lure")[1].setEnable(true);
else
-- Linda folgt ihm
setState("showFlat0");
local elaine = getParent().getCharacter(ELAINE);
--elaine.cancelCurrentActivity();
elaine.queueCommand("pm_talkCutscene", "talkCutscene", getParent().getCharacter(MIKE), "").setUserCancel(false);
end
end )
state("showFlat0")
onMsg("talking", function(msg)
-- lure deaktivieren
getParent().getCharacter(LINDA).getObjectsWithTag(GUCKHIER)[1]
.getObjectsWithBehavior("lure")[1].setEnable(false);
setState("showFlat1");
popupConversation("dialogTutSH3");
end )
state("showFlat1")
onMsg("yes", function(msg)
setState("showFlat2");
getParent().getCharacter(MIKE).cancelCurrentActivity();
getParent().getCharacter(ELAINE).cancelCurrentActivity();
sendDelayedMsgThis("epsilon", 1000,"");
end )
state("showFlat2")
onMsg("epsilon", function(msg)
setState("showFlat3");
getParent().getCharacter(MIKE).walkSO.walkToActionPoint(
getParent().getCharacter(MIKE).getObjectsWithTag(GUCKDA)[1].getActionPoint("south")
);
end )
state("showFlat3")
onMsg("arrived", function(msg)
if ( getStateObjectFromID(msg.sender).isMale() ) then
setState("showFlat4");
popupConversation("dialogTutSH4");
-- lure aktivieren
getParent().getCharacter(MIKE).getObjectsWithTag(GUCKDA)[1]
.getObjectsWithBehavior("lure")[1].setEnable(true);
end
end )
state("showFlat4")
onMsg("enterTrigger"..GUCKDA, function(msg)
setState("showFlat5");
if ( getStateObjectFromID(msg.sender).isFemale() ) then
--getParent().getCharacter(ELAINE).walkSO.walkToActionPoint(
-- getParent().getCharacter(ELAINE).getObjectsWithTag(GUCKDORT)[1].getActionPoint("south")
--);
local mike = getParent().getCharacter(MIKE);
--mike.cancelCurrentActivity();
mike.queueCommand("pm_talkCutscene", "talkCutscene", getParent().getCharacter(ELAINE), "").setUserCancel(false);
end
end )
state("showFlat5")
onMsg("talking", function(msg)
popupConversation("dialogTutSH5");
-- lure deaktivieren
getParent().getCharacter(LINDA).getObjectsWithTag(GUCKDA)[1]
.getObjectsWithBehavior("lure")[1].setEnable(false);
end )
onMsg("yes", function(msg)
setState("showFlat7");
getParent().getCharacter(MIKE).cancelCurrentActivity();
getParent().getCharacter(ELAINE).cancelCurrentActivity();
getParent().getCharacter(MIKE).walkSO.walkToActionPoint(
getParent().getCharacter(MIKE).getObjectsWithTag(GUCKWEG)[1].getActionPoint("south")
);
popupConversation("dialogTutSH55");
end )
state("showFlat7")
onMsg("enterTrigger"..GUCKWEG, function(msg)
if ( getStateObjectFromID( msg.sender ).isFemale() ) then
setState("showFlat8");
local elaine = getParent().getCharacter(ELAINE);
--elaine.cancelCurrentActivity();
elaine.queueCommand("pm_talkCutscene", "talkCutscene", getParent().getCharacter(MIKE), "").setUserCancel(false);
else
-- lure aktivieren
getParent().getCharacter(MIKE).getObjectsWithTag(GUCKWEG)[1]
.getObjectsWithBehavior("lure")[1].setEnable(true);
end
end )
state("showFlat8")
onMsg("talking", function(msg)
setState("showFlat9");
-- lure deaktivieren
getParent().getCharacter(ELAINE).getObjectsWithTag(GUCKWEG)[1]
.getObjectsWithBehavior("lure")[1].setEnable(false);
popupConversation("dialogTutSH6");
end )
state("showFlat9")
onMsg("yes", function(msg)
getParent().getCharacter(MIKE).cancelCurrentActivity();
getParent().getCharacter(ELAINE).cancelCurrentActivity();
local chairInRange = getParent().getCharacter(MIKE).getObjectsWithBehavior("chair")[1];
if (chairInRange) then
setState("feelFree0");
getParent().getCharacter(MIKE).sendMsg("sit", chairInRange);
end
end )
------- SOFA --- INTERACTION --------------------------------------------
state("feelFree0")
onMsg("sat", function(msg)
if ( getStateObjectFromID(msg.sender).isMale() ) then
popupConversation("dialogTutSH7");
end
end )
onMsg("yes", function(msg)
setState("feelFree");
local centerHere = {
getParent().getCharacter(ELAINE).getObjectsWithTag(KITCHEN)[1].getObjectsWithBehavior("lure")[1],
getParent().getCharacter(ELAINE).getObjectsWithTag(BATH)[1].getObjectsWithBehavior("lure")[1],
getParent().getCharacter(ELAINE).getObjectsWithTag(LINDASROOM)[1].getObjectsWithBehavior("lure")[1]
};
getParent().centerView( centerHere );
sendDelayedMsgThis("showAll",1000);
end )
state("feelFree")
onMsg("showAll", function(msg)
getParent().getCharacter(ELAINE).getObjectsWithTag(KITCHEN)[1].getObjectsWithBehavior("lure")[1].setEnable( true );
getParent().getCharacter(MIKE).getObjectsWithBehavior("lure")[1].setEnable( true );
getParent().getCharacter(ELAINE).getObjectsWithTag(BATH)[1].getObjectsWithBehavior("lure")[1].setEnable( true );
getParent().getCharacter(ELAINE).getObjectsWithTag(LINDASROOM)[1].getObjectsWithBehavior("lure")[1].setEnable( true );
sendMsgThis("bleibSitzen");
end )
onMsg("enterTrigger"..GUCKWEG, function(msg)
--wenn sich mike nich innerhalb von 2.5m um den GuckWeg Trigger befindet
if ( not getParent().getCharacter(MIKE).getObjectsWithTag(GUCKWEG,2.5)[1] ) then
--wieder hinsetzen und satz sagen
local chairInRange = getParent().getCharacter(MIKE).getObjectsWithTag(GUCKWEG)[1].getObjectsWithBehavior("chair")[1];
if (chairInRange) then
getParent().getCharacter(MIKE).sendMsg("sit", chairInRange);
else
getParent().getCharacter(MIKE).walkSO.walkToActionPoint(
getParent().getCharacter(MIKE).getObjectsWithTag(GUCKWEG)[1].getActionPoint("north")
);
end
sendDelayedMsgThis("isWas", 4000, "");
else
sendDelayedMsgThis("isWas", 2000, "");
--gleich satz sagen
end
end )
onMsg("isWas", function(msg)
popupConversation("dialogTutEpilog1");
end )
onMsg("sat", function(msg)
-- wenn sich linda gesetzt hat
if (getStateObjectFromID(msg.sender).isFemale()) then
--wenn sich mike nich innerhalb von 2.5m um den GuckWeg Trigger befindet
if ( not getParent().getCharacter(MIKE).getObjectsWithTag(GUCKWEG,2.5)[1] ) then
--wieder hinsetzen und satz sagen
local chairInRange = getParent().getCharacter(MIKE).getObjectsWithTag(GUCKWEG)[1].getObjectsWithBehavior("chair")[1];
if (chairInRange) then
getParent().getCharacter(MIKE).sendMsg("sit", chairInRange);
else
getParent().getCharacter(MIKE).walkSO.walkToActionPoint(
getParent().getCharacter(MIKE).getObjectsWithTag(GUCKWEG)[1].getActionPoint("north")
);
end
end
-- und mike in einem Radius von 3.5m sitzt
--local chars = getParent().getCharacter(ELAINE).getObjectsWithBehavior("character",2.5);
--if ( (chars[1] and chars[1].isMale()) or (chars[2] and chars[2].isMale()) ) then
setState("wannaMoveIn");
sendDelayedMsgThis("epsilon",1000,"");
--end
end
--print("ok cool");
end )
onMsg("enterTrigger"..KITCHEN, function(msg)
local fragezeichen = getParent().getCharacter(ELAINE).getObjectsWithBehavior("lure", 2.0);
if (fragezeichen and fragezeichen[1]) then
if (fragezeichen[1].getEnable()) then
setState("explosiveKitchen");
sendMsgThis("epsilon");
else
print("kitchenquest already done");
end
end
end )
onMsg("enterTrigger"..BATH, function(msg)
local fragezeichen = getParent().getCharacter(ELAINE).getObjectsWithBehavior("lure", 2.0);
if (fragezeichen and fragezeichen[1]) then
if (fragezeichen[1].getEnable()) then
setState("washMe");
sendMsgThis("epsilon");
else
print("bathquest already done");
end
end
end )
onMsg("enterTrigger"..LINDASROOM, function(msg)
local fragezeichen = getParent().getCharacter(ELAINE).getObjectsWithBehavior("lure", 2.0);
if (fragezeichen and fragezeichen[1]) then
if (fragezeichen[1].getEnable()) then
setState("dressMe");
sendMsgThis("epsilon");
else
print("lindas quest already done");
end
end
end )
-- MOVE IN REQUEST - EPILOGUE ------------------------------------------
state("wannaMoveIn")
onMsg("epsilon", function(msg)
setState("wannaMoveIn0");
popupConversation("dialogTutSH8");
end )
state("wannaMoveIn0")
onMsg("yes", function(msg)
getParent().getCharacter(ELAINE).walkSO.walkToActionPoint(
getParent().getCharacter(ELAINE).getObjectsWithTag(GREETINGPOINT)[1].getActionPoint("north")
);
local oven = getParent().getCharacter(MIKE).getObjectsWithBehavior("damaged");
if oven[1] then
oven[1].enterStateMachine("oven");
if oven[1].isBroken() then
--getParent().getCharacter(MIKE).sendDelayedMsg("repair", oven[1], 8000);
getParent().getCharacter(MIKE).queueCommand("pm_repair", "repair", oven[1], "")
end
end
---cleanup
local tutorialobjects = getParent().getCharacter(ELAINE).getObjectsWithBehavior("mission");
for index, object in tutorialobjects do
object.deleteGameObject();
end
local cartons = getParent().getCharacter(ELAINE).getObjectsWithBehavior("movingCarton");
for index, carton in cartons do
carton.storeData("empty",0);
end
exitStateMachine();
end )
onMsg("no", function(msg)
setState("feelFree");
end )
-- EXPLOSIVE KITCHEN - SUBQUEST ----------------------------------------
state("explosiveKitchen")
onMsg( "epsilon", function(msg)
setState("explosiveKitchen0");
getParent().getCharacter(ELAINE).walkSO.walkToActionPoint(
getParent().getCharacter(ELAINE).getObjectsWithTag(KITCHEN)[1].getActionPoint("north")
);
end )
state("explosiveKitchen0")
onMsg("arrived", function(msg)
setState("explosiveKitchen1");
popupConversation("dialogTutKitchen1");
end )
state("explosiveKitchen1")
onMsg("on", function(msg)
local fragezeichen = getParent().getCharacter(ELAINE).getObjectsWithBehavior("lure", 2.0);
if (fragezeichen[1]) then
fragezeichen[1].setEnable(false);
end
-- check here whether its the oven that got switched on
local oven = getStateObjectFromID(tonumber(msg.data));
oven.setBroken(true);
oven.enterStateMachine("oven");
--oven.gotoStateMachine("oven");
--oven.enterStateMachine("oven");
setState("explosiveKitchen2");
sendDelayedMsgThis("epsilon", 2000);
end )
onMsg("enterTrigger"..BATH, function(msg)
local fragezeichen = getParent().getCharacter(ELAINE).getObjectsWithBehavior("lure", 2.0);
if (fragezeichen and fragezeichen[1]) then
if (fragezeichen[1].getEnable()) then
setState("washMe");
sendMsgThis("epsilon");
else
print("bathquest already done");
end
end
end )
onMsg("enterTrigger"..LINDASROOM, function(msg)
local fragezeichen = getParent().getCharacter(ELAINE).getObjectsWithBehavior("lure", 2.0);
if (fragezeichen and fragezeichen[1]) then
if (fragezeichen[1].getEnable()) then
setState("dressMe");
sendMsgThis("epsilon");
else
print("lindas quest already done");
end
end
end )
onMsg("sat", function(msg)
-- wenn sich linda gesetzt hat
if (getStateObjectFromID(msg.sender).isFemale()) then
-- und mike in einem Radius von 3.5m sitzt
local chars = getParent().getCharacter(ELAINE).getObjectsWithBehavior("character",2.5);
if ( (chars[1] and chars[1].isMale()) or (chars[2] and chars[2].isMale()) ) then
setState("wannaMoveIn");
sendDelayedMsgThis("epsilon",1000,"");
end
end
--print("ok cool");
end )
state("explosiveKitchen2")
onMsg("epsilon", function(msg)
popupConversation("dialogTutKitchen2");
setState("feelFree");
end )
----- WASH ME PLEASE - SUBQUEST ----------------------------------------
state("washMe")
onMsg("epsilon", function(msg)
setState("washMe0");
getParent().getCharacter(ELAINE).walkSO.walkToActionPoint(
getParent().getCharacter(ELAINE).getObjectsWithTag(BATH)[1].getActionPoint("north")
);
end )
state("washMe0")
onMsg("arrived", function(msg)
setState("washMe1");
popupConversation("dialogTutWashMe1");
end )
state("washMe1")
onMsg("washHands", function(msg)
--setState("feelFree");
local fragezeichen = getParent().getCharacter(ELAINE).getObjectsWithBehavior("lure", 2.0);
if (fragezeichen[1]) then
fragezeichen[1].setEnable( false );
end
sendDelayedMsgThis("washedHands",4000,"");
end )
onMsg("washedHands", function(msg)
setState("feelFree");
popupConversation("dialogTutWashMe2");
--popupConversation("Linda::Man wird ja doch sauberer, nicht zu glauben:;");
end )
onMsg("enterTrigger"..KITCHEN, function(msg)
local fragezeichen = getParent().getCharacter(ELAINE).getObjectsWithBehavior("lure", 2.0);
if (fragezeichen and fragezeichen[1]) then
if (fragezeichen[1].getEnable()) then
setState("explosiveKitchen");
sendMsgThis("epsilon");
else
print("kitchenquest already done");
end
end
end )
onMsg("enterTrigger"..LINDASROOM, function(msg)
local fragezeichen = getParent().getCharacter(ELAINE).getObjectsWithBehavior("lure", 2.0);
if (fragezeichen and fragezeichen[1]) then
if (fragezeichen[1].getEnable()) then
setState("dressMe");
sendMsgThis("epsilon");
else
print("lindas quest already done");
end
end
end )
onMsg("sat", function(msg)
-- wenn sich linda gesetzt hat
if (getStateObjectFromID(msg.sender).isFemale()) then
-- und mike in einem Radius von 3.5m sitzt
local chars = getParent().getCharacter(ELAINE).getObjectsWithBehavior("character",2.5);
if ( (chars[1] and chars[1].isMale()) or (chars[2] and chars[2].isMale()) ) then
setState("wannaMoveIn");
sendDelayedMsgThis("epsilon",1000,"");
end
end
--print("ok cool");
end )
------ DRESS ME UP --- SUBQUEST ----------------------------------------
state("dressMe")
onMsg("epsilon", function(msg)
setState("dressMe0");
getParent().getCharacter(ELAINE).walkSO.walkToActionPoint(
getParent().getCharacter(ELAINE).getObjectsWithTag(LINDASROOM)[1].getActionPoint("north")
);
end )
state("dressMe0")
onMsg("arrived", function(msg)
setState("dressMe1");
popupConversation("dialogTutDressMe1");
end )
state("dressMe1")
onMsg("outfit", function(msg)
local fragezeichen = getParent().getCharacter(ELAINE).getObjectsWithBehavior("lure", 2.0);
if (fragezeichen[1]) then
fragezeichen[1].setEnable( false );
end
sendDelayedMsgThis("outfitted",4000, "");
end )
onMsg("outfitted", function(msg)
setState("feelFree");
popupConversation("dialogTutDressMe2");
--popupConversation("Linda::Klasse, sitzt ja wie angegossen. Fⁿr jede Situation das richtige Outfit!:;");
end )
onMsg("enterTrigger"..KITCHEN, function(msg)
local fragezeichen = getParent().getCharacter(ELAINE).getObjectsWithBehavior("lure", 2.0);
if (fragezeichen and fragezeichen[1]) then
if (fragezeichen[1].getEnable()) then
setState("explosiveKitchen");
sendMsgThis("epsilon");
else
print("kitchenquest already done");
end
end
end )
onMsg("enterTrigger"..BATH, function(msg)
local fragezeichen = getParent().getCharacter(ELAINE).getObjectsWithBehavior("lure", 2.0);
if (fragezeichen and fragezeichen[1]) then
if (fragezeichen[1].getEnable()) then
setState("washMe");
sendMsgThis("epsilon");
else
print("bathquest already done");
end
end
end )
onMsg("sat", function(msg)
-- wenn sich linda gesetzt hat
if (getStateObjectFromID(msg.sender).isFemale()) then
-- und mike in einem Radius von 3.5m sitzt
local chars = getParent().getCharacter(ELAINE).getObjectsWithBehavior("character",2.5);
if ( (chars[1] and chars[1].isMale()) or (chars[2] and chars[2].isMale()) ) then
setState("wannaMoveIn");
sendDelayedMsgThis("epsilon",1000,"");
end
end
--print("ok cool");
end )
endStateMachine()